#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#include<time.h>
////堆排序
//void HeapSort(int* a, int n)
//{
//	for (int i = (n - 1 - 1) / 2; i >= 0; --i)
//	{
//		//从最后一个叶子的父亲节点开始调整直到根
//
//		Adjustdown(a, n, i);
//	}
//
//	
//	int i = 1;
//	while (i < n)
//	{
//		Swap(&a[0], &a[n - i]);
//		Adjustdown(a, n - i,0);
//		++i;
//
//	}
//
//
//}


void TopK(int* a, int n,int K)
{
	for (int i = (K - 1 - 1) / 2; i >= 0; --i)
	{
		//建立前K个数据的小堆

		Adjustdown(a, K, i);
	}

	for (int i = K; i < n+1 ; i++)
	{
		if (a[0] < a[i])
		{
			a[0] = a[i];

			Adjustdown(a, K, 0);
		}
	}

}


int main()
{
	//int a[] = { 65, 100, 70, 32, 50, 60 };
	int a[] = { 15, 1, 19, 25, 8, 34, 65, 4, 27, 7 ,88,99,100,55,66,77,88,11,23,1,54,13};



	//int N = 1000;
	int K = 10;
	//HeapSort(a, sizeof(a) / sizeof(int));
	TopK(a, 22,K);

	for (size_t i = 0; i < K; ++i)
	{
		printf("%d ", a[i]);
		printf("\n");

	}
	
	return 0;




}